package object.innerclass;

import org.testng.annotations.Test;

/**
 * 内部类的目的
 * @author admin
 */
public class StaticInnerClass {

    /**
     * 内部类总是建议用static修饰，因为对于非静态内部类，编译器会给这个类的拥有者对象添加一个隐藏的引用，
     * 当想要从一个静态方法创建非静态内部类对象时，因为没有实例对象，无法添加引用，所以会报错
     */
    class Demo {
        public void sam() {
            System.out.println("hi");
        }
    }

    static class Demo2 {

    }

    // 必定错误
//    static {
//        Demo demo = new Demo();
//    }

    /**
     * 非静态内部类、静态内部类都能在普通方法里使用
     */
    @Test
    public void t1() {
        Demo demo = new Demo();
        Demo2 demo2 = new Demo2();
    }

    /**
     *
     */
    @Test
    public void t2() {
    }

    public static void main(String[] args) {

        // 静态main方法只能使用
//        Demo demo = new Demo();
        Demo2 demo2 = new Demo2();

    }


}
